home *** CD-ROM | disk | FTP | other *** search
- ;****************************************************************************
- ;* Module contenant des fonctions DOS de base pour lire un mémoire
- ;* ATTENTION toutes ces fonctions sont de type NEAR
- ;*
- ;* Programmé par Sébastien Granjoux
- ;* Commencé le 19/02/95
- ;* Modification le 19/02/95
-
- IDEAL
-
- INCLUDE "CRYSLOAD.INC"
-
- PUBLIC USEMEM
-
- SEGMENT CSEG PARA PUBLIC USE16 'CODE'
-
- ASSUME cs:CSEG
-
- UseMem:
- FILESYS <OFFSET openmem,OFFSET closemem,OFFSET seekmem,OFFSET readmem>
-
- MemPos DD 0
-
- ;***************************************************************************
- ;* Ouvre un fichier en mode lecture, ATTENTION il ne peut y avoir
- ;* qu'un seul fichier ouvert en même temps
- ;*
- ;* Entrée:
- ;* DS:DX position dans la mémoire
- ;*
- ;* Sortie:
- ;* AX erreur si C=1
-
- PROC openmem
-
- call normptr
- ret
- ENDP
-
- ;***************************************************************************
- ;* Lit un block d'octet dans un overlay précédament ouvert
- ;*
- ;* Entrée:
- ;* CX nombre d'octet à lire
- ;* DS:DX adresse du buffer recevant les données
- ;*
- ;* Sortie:
- ;* AX erreur si C=1
-
- PROC readmem
-
- push ds
- push es
- push si
- push di
- push cx
- mov ax,ds
- mov es,ax
- mov di,dx
- lds si,[cs:MemPos]
- rep movsb
- mov dx,si
- call normptr
- pop cx
- pop di
- pop si
- pop es
- pop ds
-
- ret
-
- ENDP
-
- ;***************************************************************************
- ;* Se déplace dans l'overlay par rapport à la position courante
- ;*
- ;* Entrée:
- ;* CX:DX nouvelle position dans l'overlay
- ;*
- ;* Sortie:
- ;* AX erreur si C=1
-
- PROC seekmem
-
- push ds
- mov ch,cl
- xor cl,cl
- add dx,[cs:OFFSET MemPos]
- adc ch,0
- shl cx,4
- add cx,[cs:OFFSET MemPos+2]
- mov ds,cx
-
- call normptr
- pop ds
-
- ret
-
- ENDP
-
- ;***************************************************************************
- ;* Ferme la mémoire ouverte précédament
- ;*
- ;* Sortie:
- ;* AX erreur si C=1
-
- PROC closemem
-
- ret
-
- ENDP
-
- ;**************************************************************************
- ;* Normalise un pointeur long et le sauvegarde
- ;*
- ;* Entrée:
- ;* DS:DX pointeur à normaliser
-
- PROC normptr
-
- mov bx,ds
- mov ax,dx
- shr ax,4
- add bx,ax
- and dx,000Fh
- mov [cs:OFFSET MemPos],dx
- mov [cs:OFFSET MemPos+2],bx
-
- ret
- ENDP
-
- ENDS
-
- END